#pragma once

#include "algorithm_base.h"

#include <memory>
#include <string>
#include <vector>

namespace perception::camera {

struct ObjectDetectInfo {
    // common attr
    int type_id = -1; // 物体类别, 对应 category_list列表
    float type_id_confidence = 0; // @typeID 置信度
    std::vector<float> sub_type_probs; // @brief probability for each sub-type, optional， 所有类型的置信度

    Box2f box; // 2d box

    SizeShape size; // 长宽高
    CubeBox2f pts8; // 8点
    Point2f bottom_uv; // 1点

    float alpha = 0; // 朝向
    float direction_alpha = 0; // 朝向360
    int heading = 0; // 车头车尾， 1 车头 2车尾

    TriStatus is_truncated = TriStatus::UNKNOWN; // 是否截断（具体见标注文档）
    TriStatus is_occluded = TriStatus::UNKNOWN; // 是否遮挡（具体见标注文档）
    int caseflag = 0; // 属于1个点不可见还是2个点不可见的case
    std::vector<float> object_feature; // 每个object对应的feature，用于跟踪匹配
};

using ObjectDetectInfoPtr = std::shared_ptr<ObjectDetectInfo>;

}